home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PCMania 32
/
PCMania CD32_2.iso
/
sharewar
/
util
/
scroll
/
scroll2.asm
< prev
next >
Wrap
Assembly Source File
|
1995-01-25
|
5KB
|
162 lines
_TEXT SEGMENT BYTE PUBLIC 'CODE'
ASSUME CS:_TEXT
PUBLIC _SCROLL
_SCROLL PROC NEAR
CLI
PUSH BP ;Salva registros afectados a la pila.
MOV BP,SP ;Pone el puntero de la pila en BP.
; PUSH AX ;Salva registros afectados a la pila.
PUSH BX
PUSH CX
PUSH DI
PUSH DS
; PUSH DX
PUSH ES
PUSH SI
MOV BX,0A000
MOV DS,BX ;Origen la pantalla
XOR SI,SI
MOV BX,[BP+4] ;Carga la dirección del scroll
CMP BX,1
JE arriba
CMP BX,2
JE abajo
CMP BX,3
JE izquierda
JMP derecha
arriba: MOV BX,seg datos
MOV ES,BX
MOV BX,offset datos
MOV DI,BX
MOV CX,160 ;Una línea
REP MOVSW
PUSH DS
POP ES
XOR DI,DI
MOV CX,07C60
REP MOVSW
MOV BX,seg datos
MOV DS,BX
MOV BX,offset datos
MOV SI,BX
MOV CX,160
REP MOVSW
JMP fin
abajo: MOV BX,seg datos
MOV ES,BX
MOV BX,offset datos
MOV DI,BX
MOV SI,63680 ;Guarda última línea
MOV CX,160 ;Una línea
REP MOVSW
PUSH DS
POP ES
MOV SI,63360 ;penúltima línea
MOV BX,63680 ;última
MOV DI,BX
MOV CX,199
bucle: PUSH CX
MOV CX,160
REP MOVSW
POP CX
SUB DI,640
SUB SI,640
LOOP bucle
MOV BX,seg datos
MOV DS,BX
MOV BX,offset datos
MOV SI,BX
XOR DI,DI
MOV CX,160
REP MOVSW
JMP fin
izquierda: MOV BX,seg datos
MOV ES,BX
MOV BX,offset datos
MOV DI,BX
MOV BX,200
bucle2: MOVSW
ADD SI,318
DEC BX
JNZ bucle2
PUSH DS
POP ES
XOR DI,DI
XOR SI,SI
ADD SI,2
MOV BX,200
bucle3: MOV CX,159 ;El resto de la línea
REP MOVSW
ADD SI,2
ADD DI,2
DEC BX
JNZ bucle3
MOV BX,seg datos
MOV DS,BX
MOV BX,offset datos
MOV SI,BX
XOR DI,DI
ADD DI,318
MOV BX,200
bucle4: MOVSW
ADD DI,318
DEC BX
JNZ bucle4
JMP fin
derecha: MOV BX,seg datos
MOV ES,BX
MOV BX,offset datos
MOV DI,BX
MOV BX,200
ADD SI,318
bucle5: MOVSW
ADD SI,318 ;Guarda la columna
DEC BX
JNZ bucle5
PUSH DS
POP ES
MOV BX,200
MOV SI,316
MOV DI,318
bucle7: MOV CX,159 ;Copia las filas en orden inverso
bucle6: MOVSW
SUB SI,4
SUB DI,4
LOOP bucle6
ADD SI,638
ADD DI,638
DEC BX
JNZ bucle7
MOV DS,seg datos
MOV SI,offset datos
XOR DI,DI
MOV BX,200
bucle8: MOVSW ;Restaura la columna
ADD DI,318
DEC BX
JNZ bucle8
JMP fin
datos DW 200 DUP(?)
fin: POP SI ;Reestablece registros desde la pila.
POP ES
; POP DX
POP DS
POP DI
POP CX
POP BX
; POP AX
POP BP
STI
RET ;Vuelve al C.
_SCROLL ENDP
_TEXT ENDS
END